package 力扣算法练习.main1.part1;

public class day13 {
    /*
    给定一个正整数 n ，输出外观数列的第 n 项。
    「外观数列」是一个整数序列，从数字 1 开始，序列中的每一项都是对前一项的描述。
    你可以将其视作是由递归公式定义的数字字符串序列：
    https://leetcode.cn/problems/count-and-say
     */
    String temp="1",result="1";
    public String countAndSay(int n) {
        for (int l=1;l<n;l++) {
            if (temp.equals("1")){
                result="11";
                temp="11";
                continue;
            }
            int count=0;//记录某个字符出现了几次
            char c;//记录某个字符
            char[] ch=result.toCharArray();
            c=ch[0];
            temp="";
            for (int i = 0; i < ch.length; i++) {
                if(c==ch[i]){
                    count++;
                    if (i==ch.length-1) {
                        //拼接
                        temp += "" + count + c;
                    }
                }else{
                    //拼接
                    temp+=""+count+c;
                    count=0;
                    if (i==ch.length-1){
                        //最后一个元素
                        c=ch[i];
                        count++;
                        //拼接
                        temp+=""+count+c;
                    }else {
                        c=ch[i];
                        i--;
                    }
                }
            }
            result = temp;
        }
        return result;
    }
    //官方解
    public String countAndSay1(int n) {
        String str = "1";
        for (int i = 2; i <= n; ++i) {
            StringBuilder sb = new StringBuilder();
            int start = 0;
            int pos = 0;

            while (pos < str.length()) {
                while (pos < str.length() && str.charAt(pos) == str.charAt(start)) {
                    pos++;
                }
                sb.append(Integer.toString(pos - start)).append(str.charAt(start));
                start = pos;
            }
            str = sb.toString();
        }
        return str;
    }

}
